/*
 * MIT License
 *
 * Copyright (c) 2020 wen.gu <454727014@qq.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/***************************************************************************
 * Name: key_word.h
 *
 * Purpose: key word define for sidl 
 *
 * Developer:
 *   wen.gu , 2019-10-15
 *
 * TODO:
 *
 ***************************************************************************/

/******************************************************************************
 **    INCLUDES
 ******************************************************************************/
#ifndef __MC_KEY_WORD_H__
#define __MC_KEY_WORD_H__

#include <string>


/******************************************************************************
 **    MACROS
 ******************************************************************************/
/**KW: key word */
#define KW_SERVICE                  "_service"
#define KW_DEPLOYMENT               "_deployment"
#define KW_TYPE                     "_type"
#define KW_ELEMENT                  "_element"
#define KW_ELEMENT_TYPE             "_element_type"
#define KW_KEY                      "_key"
#define KW_VALUE                    "_value"
#define KW_SIZE                     "_size"
#define KW_VERSION                  "_version"
#define KW_NAME                     "_name"
#define KW_COMMENT                  "_comment"  /** optional: only composite type: method, property or event maybe have _comment keyword */
#define KW_DEFAULT_VALUE            "_default_value" 

#define KW_NAMESPACE_FIRST          "_first"
#define KW_NAMESPACE_SECOND         "_second"
#define KW_TYPE_DEF                 "_typedef"
#define KW_METHODS                  "_methods"
#define KW_METHOD_ARGUMENTS         "_arguments"
#define KW_METHOD_ARG_DIR           "_dir"
#define KW_METHOD_RETURN            "_return"
#define KW_PROPERTIES                "_properties"
#define KW_PROPERTY_SETTER           "_setter"
#define KW_PROPERTY_GETTER           "_getter"
#define KW_PROPERTY_NOTIFICATION     "_notification"
#define KW_EVENTS                   "_events"
#define KW_EVENT_SAMPLE_TYPE        "_sample_type"

/** key word for deployment */
#define KW_DEPLOYMENT               "_deployment"
#define KW_NAMESPACE                "_namespace"
#define KW_METHOD_MAP               "_method_map"
#define KW_EVENT_MAP                "_event_map"
#define KW_PROPERTY_MAP             "_property_map"
#define KW_GROUP_ID                 "_group_id"
#define KW_COMMUNICATION_BINDING    "_communication_binding"
#define KW_BINDING_PROTOCOL         "_protocol"
#define KW_BINDING_SER_DESER        "_serializer_deserializer"


/**the key word of data type */
#define KW_TYPE_BOOL    "bool"
#define KW_TYPE_INT8    "int8"
#define KW_TYPE_INT16   "int16"
#define KW_TYPE_INT32   "int32"
#define KW_TYPE_INT64   "int64"
#define KW_TYPE_UINT8   "uint8"
#define KW_TYPE_UINT16  "uint16"
#define KW_TYPE_UINT32  "uint32"
#define KW_TYPE_UINT64  "uint64"
#define KW_TYPE_FLOAT   "float"
#define KW_TYPE_DOUBLE  "double"
#define KW_TYPE_STRING  "string"
#define KW_TYPE_STRUCT  "struct"
#define KW_TYPE_ENUM    "enum"
#define KW_TYPE_VECTOR  "vector"
#define KW_TYPE_ARRAY   "array"
#define KW_TYPE_MAP     "map"
/** a special type 'void' */
#define KW_TYPE_VOID    "void"



/** the key word of the dir of method argument */
#define KW_ARG_DIR_INPUT "input"
#define KW_ARG_DIR_OUTPUT "output"


/******************************************************************************
 **    TYPE DEFINITIONS
 ******************************************************************************/



/******************************************************************************
 **    CLASSES/FUNCTIONS DEFINITIONS
 ******************************************************************************/


#endif /** !__MC_KEY_WORD_H__ */

